package org.example.env_boot.repository;

import org.example.env_boot.entity.AqiFeedback;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 反馈信息数据访问接口
 */
@Repository
public interface AqiFeedbackRepository extends JpaRepository<AqiFeedback, Integer> {
    
    /**
     * 根据监督员ID查找反馈信息
     */
    List<AqiFeedback> findBySupervisorId(Integer supervisorId);
    
    /**
     * 根据监督员ID查找反馈信息，按时间倒序
     */
    List<AqiFeedback> findBySupervisorIdOrderByDateTimeDesc(Integer supervisorId);
    
    /**
     * 根据网格员ID查找分配给该网格员的反馈信息
     */
    List<AqiFeedback> findByGmId(Integer gmId);
    
    /**
     * 根据状态查找反馈信息
     */
    List<AqiFeedback> findByState(Integer state);
    
    /**
     * 根据省ID和城市ID查找反馈信息
     */
    List<AqiFeedback> findByProvinceIdAndCityId(Integer provinceId, Integer cityId);
    
    /**
     * 根据省ID查找反馈信息
     */
    List<AqiFeedback> findByProvinceId(Integer provinceId);
    
    /**
     * 根据城市ID查找反馈信息
     */
    List<AqiFeedback> findByCityId(Integer cityId);
    
    /**
     * 根据网格员ID和状态查找反馈信息
     */
    List<AqiFeedback> findByGmIdAndState(Integer gmId, Integer state);
    
    /**
     * 根据AQI级别ID查找反馈信息
     */
    List<AqiFeedback> findByAqiId(Integer aqiId);
    
    /**
     * 统计某个监督员的反馈数量
     */
    @Query("SELECT COUNT(af) FROM AqiFeedback af WHERE af.supervisorId = :supervisorId")
    Long countBySupervisorId(@Param("supervisorId") Integer supervisorId);
    
    /**
     * 统计某个网格员处理的反馈数量
     */
    @Query("SELECT COUNT(af) FROM AqiFeedback af WHERE af.gmId = :gmId")
    Long countByGmId(@Param("gmId") Integer gmId);
    
    /**
     * 统计某个状态的反馈数量
     */
    @Query("SELECT COUNT(af) FROM AqiFeedback af WHERE af.state = :state")
    Long countByState(@Param("state") Integer state);
    
    /**
     * 统计某个省份的反馈数量
     */
    @Query("SELECT COUNT(af) FROM AqiFeedback af WHERE af.provinceId = :provinceId")
    Long countByProvinceId(@Param("provinceId") Integer provinceId);
    
    /**
     * 统计某个城市的反馈数量
     */
    @Query("SELECT COUNT(af) FROM AqiFeedback af WHERE af.cityId = :cityId")
    Long countByCityId(@Param("cityId") Integer cityId);
} 